## Домашнее задание к занятию 3. «Введение. Экосистема. Архитектура. Жизненный цикл Docker-контейнера»


### Цель задания:
Как сдавать задания

Обязательны к выполнению задачи без звёздочки. Их нужно выполнить, чтобы получить зачёт и диплом о профессиональной переподготовке.

Задачи со звёздочкой (*) — дополнительные задачи и/или задачи повышенной сложности. Их выполнять не обязательно, но они помогут вам глубже понять тему.

Домашнее задание выполните в файле readme.md в GitHub-репозитории. В личном кабинете отправьте на проверку ссылку на .md-файл в вашем репозитории.

Любые вопросы по решению задач задавайте в чате учебной группы.
Важно

Перед отправкой работы на проверку удаляйте неиспользуемые ресурсы. Это нужно, чтобы не расходовать средства, полученные в результате использования промокода.

Подробные рекомендации здесь.

_________________________________________________________
### Задача 1

#### Сценарий выполнения задачи:

- [x] Cоздайте свой репозиторий на https://hub.docker.com;
- [x] Выберите любой образ, который содержит веб-сервер Nginx;
- [x] Создайте свой fork образа;
- [x] Реализуйте функциональность: запуск веб-сервера в фоне с индекс-страницей,содержащей HTML-код ниже:

``` html
<html>
<head>
Hey, Netology
</head>
<body>
<h1>I’m DevOps Engineer!</h1>
</body>
</html>
```

Опубликуйте созданный fork в своём репозитории и предоставьте ответ в виде ссылки на https://hub.docker.com/username_repo.


_________________________________________________________
### Задача 2.

Посмотрите на сценарий ниже и ответьте на вопрос: 
«Подходит ли в этом сценарии использование Docker-контейнеров или лучше подойдёт виртуальная машина, физическая машина? Может быть, возможны разные варианты?»

Детально опишите и обоснуйте свой выбор.

#### Сценарий:

- высоконагруженное монолитное Java веб-приложение;
-    Nodejs веб-приложение;
-    мобильное приложение c версиями для Android и iOS;
-    шина данных на базе Apache Kafka;
-    Elasticsearch-кластер для реализации логирования продуктивного веб-приложения три ноды elasticsearch, два logstash и две ноды kibana;
-    мониторинг-стек на базе Prometheus и Grafana;
-   MongoDB как основное хранилище данных для Java-приложения;
-    Gitlab-сервер для реализации CI/CD-процессов и приватный (закрытый) Docker Registry.

_________________________________________________________
### Задача 3.

Запустите первый контейнер из образа centos c любым тегом в фоновом режиме, подключив папку /data из текущей рабочей директории на хостовой машине в /data контейнера.
-    Запустите второй контейнер из образа debian в фоновом режиме, подключив папку /data из текущей рабочей директории на хостовой машине в /data контейнера.
-    Подключитесь к первому контейнеру с помощью docker exec и создайте текстовый файл любого содержания в /data.
-    Добавьте ещё один файл в папку /data на хостовой машине.
-    Подключитесь во второй контейнер и отобразите листинг и содержание файлов в /data контейнера.


_________________________________________________________
### Задача 4 (*)

Воспроизведите практическую часть лекции самостоятельно.

Соберите Docker-образ с Ansible, загрузите на Docker Hub и пришлите ссылку вместе с остальными ответами к задачам.
Как cдавать задание

Выполненное домашнее задание пришлите ссылкой на .md-файл в вашем репозитории.

_________________________________________________________


### Решение 1:
``` bash
sudo docker pull nginx
sudo docker build -t l1is/slebedev-nginx-devops34 .
sudo docker run -d -p 80:80 l1is/slebedev-nginx-devops34
sudo docker ps
sudo docker stop e4bad2767a7f && sudo docker rm e4bad2767a7f
sudo docker images
sudo docker push l1is/slebedev-nginx-devops34:latest
```

``` https://hub.docker.com/r/l1is/slebedev-nginx-devops34 ```

[Сcылка на опубликованный fork:](https://hub.docker.com/r/l1is/slebedev-nginx-devops34)
_________________________________________________________
### Решение 2:

### Высоконагруженное монолитное веб-приложение на Java:

- [x] Для высоконагруженного монолитного Java веб-приложения лучше использовать виртуализацию или Docker. Виртуализация позволяет создать виртуальные машины, на которых можно запускать приложение, обеспечивая изоляцию и гибкость. Docker, с другой стороны, предоставляет контейнеризацию, что позволяет упаковать приложение и его зависимости в контейнер, который может быть запущен на любой машине, поддерживающей Docker.

### Веб-приложение на Node.js:

- [x] Контейнеры Docker: Контейнеры Docker отлично подходят для развертывания приложений на Node.js. Контейнеры обеспечивают легкую и переносимую среду для запуска приложений на Node.js.

### Мобильное приложение с версиями для Android и iOS:


- [x] Для разработки мобильных приложений с версиями для Android и iOS необходимо использовать эмуляторы или физические устройства. Docker и виртуализация не являются подходящими вариантами для запуска мобильных приложений.

### Шина данных Apache Kafka:

- [x] Для шины данных на базе Apache Kafka рекомендуется использовать физические машины или виртуализацию. Шина данных требует высокой производительности и низкой задержки, поэтому физические машины или виртуализация могут обеспечить необходимые ресурсы.


### Кластер Elasticsearch для журналирования:

- [x] Для Elasticsearch-кластера рекомендуется использовать физические машины или виртуализацию. Elasticsearch требует высокой производительности и низкой задержки, поэтому физические машины или виртуализация могут обеспечить необходимые ресурсы.

### Стек мониторинга с использованием Prometheus и Grafana:

- [x] Для мониторинг-стека на базе Prometheus и Grafana рекомендуется использовать виртуализацию или Docker. Оба варианта обеспечивают изоляцию и гибкость, позволяя запускать Prometheus и Grafana на отдельной виртуальной машине или в контейнерах Docker.


### MongoDB в качестве основного хранилища данных для приложения на Java:

- [x] Для MongoDB как основного хранилища данных для Java-приложения рекомендуется использовать виртуализацию или Docker. Оба варианта обеспечивают изоляцию и гибкость, позволяя запускать MongoDB на отдельной виртуальной машине или в контейнере Docker.    

### Сервер GitLab для процессов CI/CD и частного Docker Registry:

- [x] Для Gitlab-сервера и приватного Docker Registry рекомендуется использовать виртуализацию или Docker. Оба варианта обеспечивают изоляцию и гибкость, позволяя запускать Gitlab и Docker Registry на отдельной виртуальной машине или в контейнерах Docker.
    

<i><b> Общий вывод:
Для большинства из перечисленных случаев рекомендуется использовать виртуализацию или Docker, так как они обеспечивают изоляцию, гибкость и масштабируемость. Однако, в случае мобильных приложений и шины данных на базе Apache Kafka, рекомендуется использовать физические машины или виртуализацию для обеспечения высокой производительности и низкой задержки.    
_________________________________________________________

### Решение 3: 

```sudo docker pull centos:latest```  
```sudo docker pull debian:latest```  
```sudo docker images ```   
```sudo docker run -it -d -v /home/l1is/Netology/DevOps-34/data/:/data centos:latest```   
```sudo docker run -it -d -v /home/l1is/Netology/DevOps-34/data/:/data debian:latest```  

```sudo docker ps ```
``` bash 
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS          PORTS     NAMES
c2de4b73a073   debian:latest   "bash"        4 seconds ago    Up 3 seconds              nostalgic_beaver
ac53f743364f   centos:latest   "/bin/bash"   40 seconds ago   Up 39 seconds             nice_swirles
```
```docker exec ac53f743364f sh -c "echo 'Привет, мир!' > /data/centos.txt"```    

```docker exec ac53f743364f sh -c "echo 'Это обучение по Docker!' > /data/centos1.txt"```


```docker exec c2de4b73a073 ls -la /data```    
``` bashtotal 4
drwxrwxrwx 1 root root  512 Sep 20 19:45 .
drwxr-xr-x 1 root root 4096 Sep 20 19:44 ..
-rw-r--r-- 1 root root   22 Sep 20 19:45 centos.txt
-rw-r--r-- 1 root root   37 Sep 20 19:45 centos1.txt
```
```docker exec c2de4b73a073 ls -la /data; docker exec c2de4b73a073 cat /data/centos.txt; docker exec c2de4b73a073 cat /data/centos1.txt```   
``` bash 
total 4
drwxrwxrwx 1 root root  512 Sep 20 19:45 .
drwxr-xr-x 1 root root 4096 Sep 20 19:44 ..
-rw-r--r-- 1 root root   22 Sep 20 19:45 centos.txt
-rw-r--r-- 1 root root   37 Sep 20 19:45 centos1.txt
Привет, мир!
Это обучение по Docker!

```

_________________________________________________________

### Решение 4*
Для решения этой задачи был создан новый Dockerfile, далее выполнялись команды:   
- ``` sudo docker pull alpine:3.14```
- ``` sudo  docker build -t l1is/ansible-sl-200923 . ```
- ``` sudo docker images ```
- ``` sudo  docker push l1is/ansible-sl-200923:latest ```
- ``` sudo docker run -it  l1is/ansible-sl-200923:latest ```
```bash 
ansible-playbook [core 2.15.4]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible-playbook
  python version = 3.9.17 (main, Jun  9 2023, 02:31:24) [GCC 10.3.1 20210424] (/usr/bin/python3)
  jinja version = 3.1.2
  libyaml = True

```

[Сcылка на контейнер с домашим заданием](https://hub.docker.com/r/l1is/ansible-sl-200923) :   https://hub.docker.com/r/l1is/ansible-sl-200923